1 module dlangui_bearlibterminal.events; 2 3 import BearLibTerminal: BT = terminal; 4 import dlangui; 5 6 KeyEvent convertKeyEvent(BT.keycode event, bool keyReleased) 7 { 8 if(!(event >= 0x04 && event <= 0x72)) // This is not keyboard event? 9 return null; 10 11 /// DlangUI keycode 12 uint dk; 13 14 with(BT) 15 switch(event) 16 { 17 case keycode.left: dk = KeyCode.LEFT; break; 18 case keycode.right: dk = KeyCode.RIGHT; break; 19 case keycode.down: dk = KeyCode.DOWN; break; 20 case keycode.up: dk = KeyCode.UP; break; 21 case keycode.enter: dk = KeyCode.RETURN; break; 22 case keycode.tab: dk = KeyCode.TAB; break; 23 case keycode.space: dk = KeyCode.SPACE; break; 24 case keycode.escape: dk = KeyCode.ESCAPE; break; 25 case keycode.backspace: dk = KeyCode.BACK; break; 26 case keycode.minus: dk = KeyCode.KEY_SUBTRACT; break; 27 case keycode.equals: dk = KeyCode.EQUAL; break; 28 case keycode.lbracket: dk = KeyCode.KEY_BRACKETOPEN; break; 29 case keycode.rbracket: dk = KeyCode.KEY_BRACKETCLOSE; break; 30 case keycode.backslash: dk = KeyCode.BACKSLASH; break; 31 case keycode.semicolon: dk = KeyCode.SEMICOLON; break; 32 case keycode.apostrophe: dk = KeyCode.QUOTE; break; 33 case keycode.grave: dk = KeyCode.TILDE; break; 34 case keycode.comma: dk = KeyCode.KEY_COMMA; break; 35 case keycode.period: dk = KeyCode.KEY_PERIOD; break; 36 case keycode.slash: dk = KeyCode.SLASH; break; 37 case keycode.pause: dk = KeyCode.PAUSE; break; 38 case keycode.insert: dk = KeyCode.INS; break; 39 case keycode.home: dk = KeyCode.HOME; break; 40 case keycode.end: dk = KeyCode.END; break; 41 case keycode.pageup: dk = KeyCode.PAGEUP; break; 42 case keycode.pagedown: dk = KeyCode.PAGEDOWN; break; 43 case keycode.KP_divide: dk = KeyCode.DIV; break; 44 case keycode.KP_multiply: dk = KeyCode.MUL; break; 45 case keycode.KP_plus: dk = KeyCode.ADD; break; 46 case keycode.KP_minus: dk = KeyCode.SUB; break; 47 case keycode.KP_period: dk = KeyCode.DECIMAL; break; 48 case keycode.KP_enter: dk = KeyCode.RETURN; break; 49 case keycode.K_delete: dk = KeyCode.DEL; break; 50 case keycode.K_0: dk = KeyCode.KEY_0; break; 51 case keycode.KP_0: dk = KeyCode.NUM_0; break; 52 53 default: 54 int keytable_diff; 55 56 if(event >= keycode.a && event <= keycode.z) // letters 57 keytable_diff = KeyCode.KEY_A - keycode.a; 58 else if(event >= keycode.K_1 && event <= keycode.K_9) // numbers 59 keytable_diff = KeyCode.KEY_1 - keycode.K_1; 60 else if(event >= keycode.KP_1 && event <= keycode.KP_9) // numpad numbers 61 keytable_diff = KeyCode.NUM_1 - keycode.KP_1; 62 else if(event >= keycode.F1 && event <= keycode.F12) // Fxx keys 63 keytable_diff = KeyCode.F1 - keycode.F1; 64 else 65 return null; 66 67 dk = event + keytable_diff; 68 69 break; 70 } 71 72 KeyAction buttonDetails = keyReleased ? KeyAction.KeyUp : KeyAction.KeyDown; 73 74 uint flags; 75 76 with(BT) 77 with(BT.keycode) 78 { 79 if(check(shift)) flags |= KeyFlag.Shift; 80 if(check(ctrl)) flags |= KeyFlag.Control; 81 if(check(alt)) flags |= KeyFlag.Alt; 82 } 83 84 /// "Dlangui Key Event" 85 KeyEvent dke = new KeyEvent(buttonDetails, dk, flags, null); 86 87 Log.v("Key event "~event.to!string~" converted to "~dke.toString); 88 89 return dke; 90 } 91 92 MouseEvent convertMouseEvent(BT.keycode _event, bool keyReleased) 93 { 94 if(!(_event >= 0x80 && _event <= 0x8C)) // This is not mouse event? 95 return null; 96 97 MouseButton btn; 98 MouseAction btnDetails = keyReleased ? MouseAction.ButtonUp : MouseAction.ButtonDown; 99 short wheelDelta = 0; 100 101 with(BT.keycode) 102 switch(_event) 103 { 104 case mouse_left: btn = MouseButton.Left; break; 105 case mouse_right: btn = MouseButton.Right; break; 106 case mouse_middle: btn = MouseButton.Middle; break; 107 case mouse_x1: btn = MouseButton.XButton1; break; 108 case mouse_x2: btn = MouseButton.XButton2; break; 109 110 case mouse_scroll: 111 btnDetails = MouseAction.Wheel; 112 wheelDelta = BT.state(mouse_wheel).to!short; 113 break; 114 115 case mouse_move: 116 btnDetails = MouseAction.Move; 117 break; 118 119 default: 120 Log.w("Mouse event isn't supported: "~_event.to!string); 121 return null; 122 } 123 124 ushort flags; 125 126 with(BT) 127 with(BT.keycode) 128 { 129 if(check(shift)) flags |= MouseFlag.Shift; 130 if(check(ctrl)) flags |= MouseFlag.Control; 131 if(check(alt)) flags |= MouseFlag.Alt; 132 } 133 134 short x_coord = BT.state(BT.keycode.mouse_x).to!short; 135 short y_coord = BT.state(BT.keycode.mouse_y).to!short; 136 137 /// "Dlangui Mouse Event" 138 MouseEvent dme = new MouseEvent(btnDetails, btn, flags, x_coord, y_coord, wheelDelta); 139 140 Log.v("Mouse event "~_event.to!string~" converted to "~dme.to!string, " wheelDelta="~dme.wheelDelta.to!string); 141 142 return dme; 143 }